Funksione te sistemit te direktorive dhe te fileve
Shpeshhere eshte e nevojshme te kemi informacione rreth direktorise ku po punojme, ose na duhet te aksesojme skedare apo direktori te ndryshme ne sistem. Per keto dhe per te tjera veprime qe duam te kryejme mbi sistemin e direktorive dhe te fileve, tek serveri ku kemi hostuar skriptet PHP, nje numer i shumte funksionesh vijne ne ndihme. Keto funksione jane pjese e funksioneve baze te PHP-se dhe nuk kane nevoje per importim. Me poshte shpjegojme nje pjese te funksioneve kryesore te sistemit te direktorive dhe te fileve.
getcwd
string getcwd ()
Ky funksion kthen nje stringe e cila permban pathin e direktorise aktuale ku po punojme. Nqs. deshton marrja e ketij informacioni nga sistemi, atehere kthehet FALSE
.
Shembull:
// direktoria aktuale
echo getcwd(); //Rezultati: /home/alban.afmeti
//Funksion qe sherben per nderrimin e direktorise aktuale
chdir('cvs');
// direktoria aktuale
echo getcwd(); //Rezultati: /home/alban.afmeti/cvs
chdir
bool chdir ( string $directory )
Ndryshon direktorine aktuale te PHP-se ne nje direktori tjeter te dhene ne parametrin hyres $directory
. Kthen TRUE
nqs. veprimi eshte i suksesshem, perndryshe kthen FALSE
.
// direktoria aktuale
echo getcwd(); //Rezultati: /home/alban.afmeti/cvs
//Funksion qe sherben per nderrimin e direktorise aktuale
chdir('dir_tjeter');
// direktoria aktuale
echo getcwd(); //Rezultati: /home/alban.afmeti/cvs/dir_tjeter
Direktorite duhet te ekzistojne perndryshe veprimi do te deshtoje.
scandir
array scandir ( string $directory [, int $sorting_order = SCANDIR_SORT_ASCENDING [, resource $context ]] )
Kthen nje koleksion array te skedareve dhe direktorive qe ndodhen brenda direktorise se dhene ne hyrje $directory
.
Parametri opsional $sorting_order
ka vlere default nje renditje alfabetike ne ngjitje. Nqs. do te kalohet konstantja SCANDIR_SORT_DESCENDING
atehere renditja do te behet ne zbritje. Ne rast se kalojme konstanten SCANDIR_SORT_NONE
atehere elementet do te kthehen te parenditura.
Shembull:
$dir = '/tmp';
$files = scandir($dir);
print_r($files);
Rezultati:
Array
(
[0] => .
[1] => ..
[2] => skript.php
[3] => ckemi.txt
[4] => direktoria_tjtr
)
Ne rastin e kalimit te $sorting_order
me vlere SCANDIR_SORT_DESCENDING
:
$dir = '/tmp';
$files = scandir($dir, SCANDIR_SORT_DESCENDING);
print_r($files);
Rezultati:
Array
(
[0] => ckemi.txt
[1] => direktoria_tjtr
[2] => skript.php
[3] => ..
[4] => .
)
copy
bool copy ( string $source , string $dest [, resource $context ] )
Ben nje kopje te skedarit $source
ne destinacionin $dest
. Kthen TRUE
nqs. kopja behet me sukses, perndryshe kthen FALSE
.
Shembull:
$file = 'shembull.txt';
$newfile = 'shembull.txt.bak';
//Kopjojme skedarin shembull.txt, ne nje skedar te ri me emer shembull.txt.bak
$rezultati = copy($file, $newfile);
if (rezultati) {
echo "Kopjimi u realizua me sukses!";
} else {
echo "Kopjimi deshtoi!";
}
Ne rast se kopjimi behet me sukses atehere printohet mesazhi Kopjimi u realizua me sukses!
, perndryshe Kopjimi deshtoi!
.
rename
bool rename ( string $oldname , string $newname [, resource $context ] )
Ky funksion ben riemerimin e nje skedari. Me ane te ketij funksioni mund te realizojme edhe zhvendosjen e nje skedari nga nje direktori ne nje tjeter, pasi ne parametrin $oldname
kalohet pathi i plote i skedarit, ndersa ne parametrin $newname
kalohet pathi i ri i skedarit, ne te cilin mund te ndryshojme edhe emrin e direktorive nese duam. Nqs. skedari me emrin $newname
eshte ekzistues, atehere ai do te mbishkruhet. Kthen TRUE
nqs. riemerimi behet me sukses, perndryshe kthen FALSE
.
Shembull:
rename("/tmp/tmp_file.txt", "/home/alban.afmeti/dokumentet/my_file.txt");
Ne kete rast emri i skedarit ndryshon nga tmp_file.txt ne my_file.txt, por gjithashtu behet edhe zhvendosja e skedarit nga direktoria /tmp, ne direktorine /home/alban.afmeti/dokumentet.
mkdir
bool mkdir ( string $pathname [, int $mode = 0777 [, bool $recursive = false [, resource $context ]]] )
Perpiqet te krijoje direktorine e specifikuar nga pathi qe i japim ne hyrje $pathname
. Parametri i dyte opsional permban moden e krijimit te direktorise, pra te drejtat rreth lexim, shkrim dhe ekzekutim. Ajo ka nje vlere default 0777
. Parametri i trete opsional percakton nqs. direktorite duhet te krijohen ne menyre rekursive apo jo. Pra, ne rast se duhet te krijohet vetem direktoria e fundit ne path, apo disa direktori ne path.
Kthen TRUE
nqs. krijimi i direktorise behet me sukses, perndryshe kthen FALSE
.
Shembull:
mkdir("/pathi/tek/direktoria", 0700);
Kalimi i parametrit te rekursivitetit:
// Desired folder structure
$structure = './depth1/depth2/depth3/';
//Edhe ne rast se folderi 'depth1' dhe 'depth2' nuk ekzistojne, ata do te krijohen
$rezultati = mkdir($structure, 0777, true);
if (!$rezultati) {
echo ('Deshtoi krijimi i direktorive...');
}
rmdir
bool rmdir ( string $dirname [, resource $context ] )
Perpiqet te fshije nje direktori te specifikuar ne parametrin $dirname
. Direktoria duhet te jete boshe, dhe duhet te kemi lejet e mjaftueshme per te bere nje veprim te tille. Kthen TRUE
nqs. fshirja e direktorise ndodh me sukses, perndryshe kthen FALSE
.
Shembull:
if (!is_dir('shembull')) {
mkdir('shembull');
}
rmdir('shembull');
unlink
bool unlink ( string $filename [, resource $context ] )
Fshin skedarin e specifikuar tek parametri $filename
. Kthen TRUE
nqs. fshirja e skedarit ndodh me sukses, perndryshe kthen FALSE
.
Shembull:
//Nqs. skedari eshte ne direktori te njejte me skriptin PHP
unlink('test.html');
// ose me path te plote
unlink('/home/alban.afmeti/Desktop/test.html');
filesize
int filesize ( string $filename )
Kthen nje numer integer
qe permban madhesine e skedarit te specifikuar ne parametrin $filename
.
$filename = 'somefile.txt';
echo $filename . ': ' . filesize($filename) . ' bytes';
Rezultati: somefile.txt: 133 bytes
file_exists
bool file_exists ( string $filename )
Kontrollon nqs. skedari ose direktoria e specifikuar tek $filename
ekziston. Kthen TRUE
nqs. ekziston, perndryshe kthen FALSE
.
Shembull:
$filename = '/pathi/tek/direktoria/shembull.txt';
if (file_exists($filename)) {
echo "Skedari $filename ekziston.";
} else {
echo "Skedari $filename nuk ekziston!";
}
is_dir
bool is_dir ( string $filename )
Kontrollon nqs. pathi i dhene $filename
eshte direktori. Nese po atehere kthen TRUE
, perndryshe kthen FALSE
. Ne rast se pathi eshte relativ kontrolli do te behet duke filluar nga direktoria aktuale ku gjendet skripti PHP.
Shembull:
if(is_dir('dir1/dir2')) {
echo ("Pathi i dhene ekziston dhe eshte nje direktori.");
} else {
echo ("Pathi i dhene nuk eshte nje direktori.");
}
is_file
bool is_file ( string $filename )
Kontrollon nqs. pathi i dhene eshte nje file i rregullt. Kthen TRUE
nqs. pathi i dhene ekziston dhe eshte nje file i rregullt, perndryshe kthen FALSE
.
Shembull:
var_dump(is_file('a_file.txt')); //Rezultai: bool(true)
var_dump(is_file('/usr/bin/')); //Rezultai: bool(false)
chmod
bool chmod ( string $filename , int $mode )
Perpiqet te ndryshoje moden (lejet per lexim, shkrim, ekzekutim) te file-it te dhene $filename
, ne moden e dhene $mode
. Kthen TRUE
nese veprimi kryhet me sukses, perndryshe kthen FALSE
.
Per siguri, moda duhet te kete nje shifer 0
ne fillim, sepse ajo duhet te jete oktale:
chmod("/somedir/somefile", 755); // shifer dhjetore; ndoshta e pasakte
chmod("/somedir/somefile", "u+rwx,go+rx"); // string; e pasakte
chmod("/somedir/somefile", 0755); // oktale; vlere e sakte e modes
Shembuj:
// lexim dhe shkrim per zoteruesin (owner), asgje per te tjeret
chmod("/somedir/somefile", 0600);
// lexim dhe shkrim per zoteruesin (owner), lexim per te tjeret
chmod("/somedir/somefile", 0644);
// Gjithcka per zoteruesin (owner), lexim dhe ekzekutim per te tjeret
chmod("/somedir/somefile", 0755);
// Gjithcka per zoteruesin (owner), lexim dhe ekzekutim per grupin e zoteruesit (owner)
chmod("/somedir/somefile", 0750);
basename
string basename ( string $path [, string $suffix ] )
Ne hyrje pranon si parameter nje stringe e cila permban nje path te caktuar. Jep si output emrin e file-it, pa perfshire pathin e plote, pra jep pjesen e fundit te pathit pas ndaresit te direktorive (/
ne sistemet Linux, ndersa ne Windows /
ose \
). P.sh. ne pathin /dir1/dir2/hello.php
, pjesa e fundit eshte hello.php
.
Parametri i dyte opsional $suffix
sherben per te hequr nga stringa qe do te kthehet prapashtesen me vlere $suffix
, ne rast se stringa qe do te kthehet perfundon me nje prapashtese te tille.
Shembull:
echo basename("/etc/sudoers.d", ".d"); // Rezultati: sudoers
echo basename("/etc/sudoers.d"); // Rezultati: sudoers.d
echo basename("/etc/passwd"); // Rezultati: passwd
echo basename("/etc/"); // Rezultati: etc
echo basename("."); // Rezultati: .
echo basename("/"); // Stringe boshe
dirname
string dirname ( string $path [, int $levels = 1 ] )
Funksioni kthen direktorine prind te file-it, pathi i te cilit specifikohet tek parametri $path
. Ne rast se $levels
specifikohet, atehere nuk kthehet direktoria e drejperdrejte prind, por kthehet direktoria ne baze te numrit te dhene tek parametri $levels
, pra p.sh. nqs jepet 2, do te kthehet direktoria dy nivele me lart. $levels
duhet te jete nje integer
me i madh se 0
. Nese nuk ka ndares direktories (/
) ne path, atehere do te na kthehet nje pike (.
) qe tregon direktorine aktuale.
Shembull:
echo dirname("/etc/passwd"); // Rezultati: /etc
echo dirname("/etc/"); // Rezultati: / (ose \ ne Windows)
echo dirname("."); // Rezultati: .
echo dirname("C:\\"); // Rezultati C:\
//Me nivel te specifikuar - dy direktori me lart sepse eshte specifikuar niveli: 2
echo dirname("/usr/local/lib", 2); // Rezultati /usr
pathinfo
pathinfo ( string $path [, int $options = PATHINFO_DIRNAME | PATHINFO_BASENAME | PATHINFO_EXTENSION | PATHINFO_FILENAME ] )
Kthen informacione rreth nje pathi te specifikuar. Duke u bazuar tek parametri $options
kthen nje koleksion array, ose nje stringe me informacione. Nqs. $options
nuk specifikohet atehere kthen nje array me te gjitha informacionet, perndryshe kthen nje stringe me informacionin e kerkuar ne baze te parametrit $options
qe pranon keto konstante: PATHINFO_DIRNAME
, PATHINFO_BASENAME
, PATHINFO_EXTENSION
dhe PATHINFO_FILENAME
.
Informacionet qe kthehen jane prapashtesa e file-it, emri i file-it, dirname
i file-it dhe basename
i file-it te cilat i shpjeguam edhe me lart se cfare ishin. Ne rast se file nuk permban prapashtese, nuk do te kthehet elementi i prapashteses.
Shembull:
$path_parts = pathinfo('/www/htdocs/inc/lib.inc.php');
echo $path_parts['dirname']; //Rezultati: /www/htdocs/inc
echo $path_parts['basename']; //Rezultati: lib.inc.php
echo $path_parts['extension']; //Rezultati: php
echo $path_parts['filename']; //Rezultati: lib.inc
filetype
string filetype ( string $filename )
Kthen tipit e file-it te dhene ne hyrje. Vlerat e mundshme jane: fifo
, char
, dir
, block
, link
, file
, socket
dhe unknown
.
Kthen FALSE
nese ndodh nje gabim.
Shembull:
echo filetype('/etc/passwd'); //Rezultati: file
echo filetype('/etc/'); //Rezultati: dir
is_uploaded_file
bool is_uploaded_file ( string $filename )
Tregon nqs. nje file i dhene ne hyrje eshte ngarkuar nepermjet HTTP POST
. Nese po kthen TRUE
, perndryshe kthen FALSE
.
Ne menyre qe te funksionoje ne menyren e duhur, ky funksion do nje argument si: $_FILES['userfile']['tmp_name']
qe eshte nje emer file i perkohshem i vendosur nga vete sistemi, pasi emri origjinal i file-it ne kompjuterin klient $_FILES['userfile']['name']
nuk funksionon.
Shembull:
if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
echo "Skedari ". $_FILES['userfile']['name'] ." u ngarkua me sukses.\n";
} else {
echo "Sulm i mundshem nga jashte.";
}
move_uploaded_file
bool move_uploaded_file ( string $filename , string $destination )
Zhvendos nje file te ngarkuar ne nje vend te ri. Fillimisht kontrollon nese $filename
eshte nje file i ngarkuar i vlefshem (dmth. i ngarkuar nepermjet mekanizmit te ngarkimit HTTP POST
te PHP-se). Nese file eshte i vlefshem, ai do te zhvendoset ne nje lokacion me emer te dhene nga $destination
. Nese file nuk eshte i vlefshem nuk do te behet asnje veprim, dhe funksioni do te ktheje FALSE
. Edhe ne rast se prej ndonje problemi te mundshem nuk mund te behet transferimi i file-it, funksioni do te ktheje FALSE
.
Shembull:
$uploads_dir = '/uploads';
if($_FILES["picture"]["error"] == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["picture"]["tmp_name"];
// basename() mund te parandaloje sulmet kapercyese ndaj sistemit te fileve;
// nje validim me i thelle i file-it do te ishte i pershtatshem
$name = basename($_FILES["picture"]["name"]);
//zhvendos file-in me emer te perkohshem, ne direktorine /uploads me emrin origjinal
//qe kishte ne kompjuterin klient
move_uploaded_file($tmp_name, "$uploads_dir/$name");
}
Ne rast se skedari destinacion ekziston perpara se te bejme zhvendosjen, atehere ai do te mbishkruhet nga skedari i ri.